﻿using System;
using System.ComponentModel;
using System.Windows.Forms;
using Csla.Tools.Plantillas;
using Csla;
using DemoCSLA.Libreria.Editables;
using DemoCSLA.Libreria.SoloLectura;
using Csla.Validation;

namespace DemoCSLA.Windows
{
    public partial class frmMntClientes : _PlantillaMantenimiento
    {

        #region Constructor
        public frmMntClientes()
        {
            InitializeComponent();
            InfoListDataGridView.CellDoubleClick += Editar;
        }
        #endregion

        #region Declaracion de Variables

        private Clientes m_Clientes;

        #endregion

        #region Metodos Privados

        //Si tienes clases u objetos que necesites cargar colocalos aquí

        #endregion

        #region Botones Nuevo

        public override void Nuevo(Object sender, EventArgs e)
        {
            try
            {
                base.Nuevo(sender, e);
                this.m_Clientes = Clientes.NewClientes();
                this.clientesBindingSource.DataSource = this.m_Clientes;
            }
            catch (DataPortalException ex)
            { MessageBox.Show(ex.BusinessException.Message, ex.BusinessException.Source, MessageBoxButtons.OK, MessageBoxIcon.Information); }
            catch (Exception ex)
            { MessageBox.Show(ex.Message, "Nuevo", MessageBoxButtons.OK, MessageBoxIcon.Information); }
        }

        #endregion

        #region Boton Eliminar

        public override void Eliminar(Object sender, EventArgs e)
        {
            if (MessageBox.Show(Properties.Resources.msgEliminar, "Confirme", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                try
                {
                    this.CargaDatosActuales();
                    Clientes.DeleteClientes(this.Clave);
                    this.Actualizar(sender, e);
                    base.Eliminar(sender, e);
                }
                catch (DataPortalException ex)
                { MessageBox.Show(ex.BusinessException.Message, ex.BusinessException.Source, MessageBoxButtons.OK, MessageBoxIcon.Information); }
                catch (Exception ex)
                { MessageBox.Show(ex.Message, "Eliminar", MessageBoxButtons.OK, MessageBoxIcon.Information); }

            }
        }

        #endregion

        #region Boton Grabar

        public override void Grabar(Object sender, EventArgs e)
        {
            this.clientesBindingSource.RaiseListChangedEvents = false;
            try
            {
                this.clientesBindingSource.EndEdit();
                //Aqui puedes colocar algunas propiedades adicionales para guardar
                this.m_Clientes.Save();
                this.Actualizar(sender, e);
                base.Grabar(sender, e);
            }
            catch (DataPortalException ex)
            { MessageBox.Show(ex.BusinessException.Message, ex.BusinessException.Source, MessageBoxButtons.OK, MessageBoxIcon.Information); }
            catch (ValidationException)
            { MessageBox.Show(this.m_Clientes.BrokenRulesCollection.ToString(), "Grabar", MessageBoxButtons.OK, MessageBoxIcon.Information); }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Grabar", MessageBoxButtons.OK, MessageBoxIcon.Information);
                this.clientesBindingSource.RaiseListChangedEvents = true;
            }

        }

        #endregion

        #region Boton Cancelar

        public override void Cancelar(Object sender, EventArgs e)
        {
            this.clientesBindingSource.CancelEdit();
            base.Cancelar(sender, e);
        }

        #endregion

        #region Actualizar

        public override void Actualizar(Object sender, EventArgs e)
        {
            try
            {
                ClientesInfoList.FiltroCriteria Crit = new ClientesInfoList.FiltroCriteria();
                //Si tu clase InfoList contiene alguna clase criteria agrégala aqui
                SortedBindingList<ClientesInfo> ListaOrdenada = new SortedBindingList<ClientesInfo>(ClientesInfoList.GetClientesInfoList(Crit));
                ListaOrdenada.ApplySort("Nombres", ListSortDirection.Ascending);
                this.CargaControl(clientesInfoListBindingSource, ListaOrdenada);

                base.Actualizar(sender, e);
            }
            catch (DataPortalException ex)
            { MessageBox.Show(ex.BusinessException.Message, ex.BusinessException.Source, MessageBoxButtons.OK, MessageBoxIcon.Information); }
            catch (Exception ex)
            { MessageBox.Show(ex.Message, "Actualizar", MessageBoxButtons.OK, MessageBoxIcon.Information); }

        }

        #endregion

        #region Eventos del Formulario

        public override void CargaDatosActuales()
        {
            if (clientesInfoListBindingSource.Current != null)
                Clave = ((ClientesInfo)clientesInfoListBindingSource.Current).IdCliente;
            else
                throw new InvalidOperationException("Seleccione un registro");
        }

        public override void Formulario(Object sender, EventArgs e)
        {
            try
            {
                this.Actualizar(sender, e);
                base.Formulario(sender, e);
            }
            catch (DataPortalException ex)
            { MessageBox.Show(ex.BusinessException.Message, ex.BusinessException.Source, MessageBoxButtons.OK, MessageBoxIcon.Information); }
            catch (Exception ex)
            { MessageBox.Show(ex.Message, "Formulario", MessageBoxButtons.OK, MessageBoxIcon.Information); }

        }

        public override void Editar(Object sender, EventArgs e)
        {

            try
            {
                this.CargaDatosActuales();
                this.m_Clientes = Clientes.GetClientes(this.Clave);
                this.clientesBindingSource.DataSource = this.m_Clientes;
                base.Editar(sender, e);
            }
            catch (DataPortalException ex)
            { MessageBox.Show(ex.BusinessException.Message, ex.BusinessException.Source, MessageBoxButtons.OK, MessageBoxIcon.Information); }
            catch (Exception ex)
            { MessageBox.Show(ex.Message, "Editar", MessageBoxButtons.OK, MessageBoxIcon.Information); }
        }

        #endregion

    }
}
